package utilidades;

import java.io.Serializable;


public class Posicion implements Serializable{
	
	private static final long serialVersionUID = 1L;
	private double coordenadaEnX;
	private double coordenadaEnY;
	
	//Contructor: Ambas coordenadas X e Y quedan 
	//inicialisadas en cero. 
	public Posicion() {
		coordenadaEnX = 0;
		coordenadaEnY = 0;
	}
	
	//Contructor: Ambas coordenadas quedan inicializadas
	//con los valores pasados por parametros.
	public Posicion(double x, double y) {
		coordenadaEnX = x;
		coordenadaEnY = y;
	}
	
	//Devuelve la coordenada Y.
	public double getX() {
		return coordenadaEnX;
	}

	
	//Devuelve la coordenada X.
	public double getY() {
		return coordenadaEnY;
	}
	
	//Setea una nueva coordenada en X.
	public void setX(double nuevaCoordenadaEnX) {
		coordenadaEnX = nuevaCoordenadaEnX;
	}
	
	//Setea una nueva coordenada en Y.
	public void setY(double nuevaCoordenadaEnY) {
		coordenadaEnY = nuevaCoordenadaEnY;
	}

	public Posicion trasladar(Posicion unaPosicion) {

		Posicion nuevaPosicion = this.obtenerSuma(unaPosicion);
		
		return nuevaPosicion;
	}
	
	public void sumarPosicion(Posicion unaPosicion){
		
		coordenadaEnX += unaPosicion.getX();
		coordenadaEnY += unaPosicion.getY();
	}
	
	public void restarPosicion(Posicion unaPosicion){
			
		coordenadaEnX -= unaPosicion.getX();
		coordenadaEnY -= unaPosicion.getY();
		
	}
	
	public Posicion obtenerSuma(Posicion unaPosicion){
		
		double resultadoX = coordenadaEnX + unaPosicion.getX();
		double resultadoY = coordenadaEnY + unaPosicion.getY();
		
		Posicion resultado = new Posicion(resultadoX, resultadoY);		
		
		return resultado;
	}
	
	public Posicion obtenerResta(Posicion unaPosicion){
		
		double resultadoX = coordenadaEnX - unaPosicion.getX();
		double resultadoY = coordenadaEnY - unaPosicion.getY();
		
		Posicion resultado = new Posicion(resultadoX, resultadoY);		
		
		return resultado;
	}
	
	
	public double distancia (Posicion otro) {
		return Math.sqrt
			( Math.pow((coordenadaEnX - otro.getX()),2) +
				Math.pow((coordenadaEnY - otro.getY()),2) );
	}

	public double getNorma () {
		return Math.sqrt
			( Math.pow((coordenadaEnX),2) +
				Math.pow((coordenadaEnY),2) );
	}	
	
	public String toString( ) {
		double posicionXredondeada = Math.round(this.getX()*100.0)/100.0;
		double posicionYredondeada = Math.round(this.getY()*100.0)/100.0;
		return posicionXredondeada + ";" + posicionYredondeada ;
	}
	
	public Posicion obtenerPosicionEnDireccionYdistancia(Direccion unaDireccion, double unaDistancia){
				
		double coordenadaX = this.getX() + unaDireccion.getX()*unaDistancia;
		double coordenadaY = this.getY() + unaDireccion.getY()*unaDistancia;
		
		Posicion nuevaPosicion = new Posicion(coordenadaX, coordenadaY);
		
		return nuevaPosicion;
	}
	
	public Posicion obtenerPosicionEnDireccion(Direccion unaDireccion){
		
		double coordenadaX = this.getX() + unaDireccion.getX();
		double coordenadaY = this.getY() + unaDireccion.getY();
		
		Posicion nuevaPosicion = new Posicion(coordenadaX, coordenadaY);
		
		return nuevaPosicion;
	}
	
}
